package com.the_last.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.the_last.pojo.dto.ReservationDTO;
import com.the_last.pojo.po.Reservation;
import com.the_last.utils.Result;

/**
 * @author zhanghaifeng
 * @description 针对表【reservation】的数据库操作Service
 * @createDate 2025-06-05 11:52:48
 */
public interface ReservationService extends IService<Reservation> {
    
    /**
     * 获取预约列表
     *
     * @param venueId    场馆ID（可选）
     * @param date       预约日期（可选）
     * @param status     预约状态（可选）
     * @param userId     用户ID（可选）
     * @param needPaging 是否需要分页
     * @param pageNum    页码
     * @param pageSize   每页大小
     * @return 预约列表
     */
    Result<?> getReservationList(Integer venueId, String date, Integer status, Long userId, boolean needPaging, Integer pageNum, Integer pageSize);
    
    /**
     * 删除预约
     *
     * @param id 预约ID
     * @return 删除结果
     */
    Result deleteReservation(Long id);
    
    /**
     * 修改预约状态
     *
     * @param id     预约ID
     * @param status 新状态（0：已取消 1：待使用 2：已使用）
     * @return 修改结果
     */
    Result updateReservationStatus(Long id, Integer status);
    
    /**
     * 创建预约
     *
     * @param reservationDTO 预约信息
     * @param userId 用户ID
     * @return 预约结果
     */
    Result<String> createReservation(ReservationDTO reservationDTO, Long userId);
    
    
    /**
     * 检查场馆是否有未完成的预约
     * 未完成的预约定义为：大于当前时间且状态不为已取消(status!=0)的预约
     *
     * @param venueId 场馆ID
     * @return 是否有未完成的预约
     */
    boolean hasActiveReservations(Integer venueId);
}
